/** 忽略指定环境
 * @param flag 是否指定平台标识，true 时直接返回结果。
 * @param ignoreEnv 忽略指定环境
 */
export const ignoreEnvs = (flag: boolean, ignoreEnv?: (typeof __UNI_NODE_ENV__)[]) => {
  if (ignoreEnv?.length > 0) {
    if (flag) {
      return flag;
    }
    return ignoreEnv.filter((o) => o.toUpperCase() === __UNI_NODE_ENV__.toUpperCase())?.length > 0;
  }
  return flag;
};

/** 是否 H5 平台 */
export const isH5 = __UNI_PLATFORM__ === 'h5';
/** 是否 APP 平台 */
export const isApp = __UNI_PLATFORM__ === 'app';
/** 是否 小程序 平台 */
export const isMp = __UNI_PLATFORM__.startsWith('mp-');
/** 是否 微信小程序 平台 */
export const isMpWeixin = __UNI_PLATFORM__.startsWith('mp-weixin');
/** 是否 支付宝小程序 平台 */
export const isMpAplipay = __UNI_PLATFORM__.startsWith('mp-alipay');
/** 是否 头条小程序 平台 */
export const isMpToutiao = __UNI_PLATFORM__.startsWith('mp-toutiao');

/** 是否指定平台
 * @param platform 平台类型
 * @param ignoreEnv 忽略指定环境
 */
export const is = (platform: typeof __UNI_PLATFORM__, ignoreEnv?: (typeof __UNI_NODE_ENV__)[]) => {
  const flag = __UNI_PLATFORM__ === platform;
  return ignoreEnvs(flag, ignoreEnv);
};

/** 平台类型 */
export const platform = __UNI_PLATFORM__;

/** 节点环境 */
export const env = __UNI_NODE_ENV__;

/** 平台 */
const PLATFORM = {
  /** 忽略指定环境 */
  ignoreEnvs,
  /** 是否 H5 平台 */
  isH5,
  /** 是否 APP 平台 */
  isApp,
  /** 是否 小程序 平台 */
  isMp,
  /** 是否 微信小程序 平台 */
  isMpWeixin,
  /** 是否 支付宝小程序 平台 */
  isMpAplipay,
  /** 是否 头条小程序 平台 */
  isMpToutiao,
  /** 是否指定平台 */
  is,
  /** 平台类型 */
  platform: __UNI_PLATFORM__,
  /** 节点环境 */
  env: __UNI_NODE_ENV__,
};
export default PLATFORM;
